package com.le.tester.onjava8.l_2_4;

import com.le.tester.imooc.masterJUC.lock.reentrantlock.FairLock;
import com.le.tester.javaThink.fifth.chapter18_Str.Immutable;

/**
 * createTime：2023/2/3 9:42
 * description：对于创建不可变性的类昂贵的开销
 */

class Mutable {
    private int data;

    public Mutable(int data) {
        this.data = data;
    }

    public Mutable add(int x) {
        data += x;
        return this;
    }

    public Mutable multiply(int x) {
        data *= x;
        return this;
    }

    public Immutable2 makeImmutable2() {
        return new Immutable2(data);
    }


}

public class Immutable2 {
    private int data;

    public Immutable2(int data) {
        this.data = data;
    }

    public int read() {
        return data;
    }

    public boolean nonzero() {
        return data != 0;
    }

    public Immutable2 add(int x) {
        return new Immutable2(data + x);
    }

    public Immutable2 multiple(int x) {
        return new Immutable2(data * x);
    }

    public Mutable makeMutable() {
        return new Mutable(data);
    }

    public static Immutable2 modify1(Immutable2 y) {
        Immutable2 val = y.add(12);
        val = val.multiple(3);
        val = val.add(11);
        val = val.multiple(2);
        return val;
    }

    public static Immutable2 modify2(Immutable2 y) {
        Mutable m = y.makeMutable();
        m.add(12).multiply(3).add(11).multiply(2);
        return m.makeImmutable2();
    }

    public static void main(String[] args) {


    }
}
